#include <stdlib.h>
#include <stdio.h>
#include <getopt.h>
#include <string.h>
#include <errno.h>
#include "cesar.h"

#define NINGUNO 0
#define ARGUMENTOS 1
#define FALTA_SERVIDOR 2
#define ERROR_EN_CYPHER 3
#define ERROR_EN_UNCYPHER 4
#define MALLOC 5

int main (int argc, char* const argv[]) {
	int clave = 0;
	char clave_char = '\0';
	size_t i, len;
	const char* mensaje = 0;
	char* cifrado = NULL;


	if (argc < 3) {
		printf("Modo de uso: %s clave mensaje\n",argv[0]);
		return(ARGUMENTOS);
	}

	clave = atoi(argv[1]);
	if (clave == 0) {
		printf("%s: La clave no debe ser 0.\n",argv[0]);
		return (ARGUMENTOS);
	}
	
	mensaje = argv[2];
	
	if (clave > 0)
		printf ("Cifrando \"%s\" con clave %d.\n",mensaje,clave);
	else
		printf ("Descifrando \"%s\" con clave %d.\n",mensaje,-clave);

	cifrado = malloc( sizeof(char) * (strlen(mensaje)+1) );
	if (cifrado == NULL) {
		printf("Error al reservar memoria para el mensaje cifrado.\n");
		return (MALLOC);
	}

	len = strlen(mensaje);
	clave_char = (char)(clave%256);
	for (i=0; i<len; ++i)
		cifrado[i] = mensaje[i]+clave_char;
	cifrado[len] = '\0';

	printf ("Resultado: \"%s\".\n",cifrado);

	free(cifrado);
	
	return(NINGUNO);
}
